
package org.wk.common.sms;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

/**
 * 功能描述: 验证码 <br/>
 * Date: 2018-1-30 上午11:28:42 <br/>
 * 
 * @author lk
 */
public class TelMsgUtil {

	// 产品名称:云通信短信API产品,开发者无需替换
	static final String product = "Dysmsapi";
	// 产品域名,开发者无需替换
	static final String domain = "dysmsapi.aliyuncs.com";

	// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
	static final String accessKeyId = "LTAImLl2k7l3BXGq";
	static final String accessKeySecret = "gVI8j7Kc7aFaSV5eQwtJTzJD0c4UP1";

	/**
	 * 发送后失败
	 * @param tel
	 * @return
	 */
	public static SendSmsResponse sendSmss(String tel) {
		try {
			// 可自助调整超时时间s
			System.setProperty("sun.net.client.defaultConnectTimeout", "120000");
			System.setProperty("sun.net.client.defaultReadTimeout", "120000");

			// 初始化acsClient,暂不支持region化
			IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",
					accessKeyId, accessKeySecret);

			DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product,
					domain);

			IAcsClient acsClient = new DefaultAcsClient(profile);

			// 组装请求对象-具体描述见控制台-文档部分内容
			SendSmsRequest request = new SendSmsRequest();
			// 必填:待发送手机号
			request.setPhoneNumbers(tel);
			// 必填:短信签名-可在短信控制台中找到
			request.setSignName("微科软件");
			// 必填:短信模板-可在短信控制台中找到
			request.setTemplateCode("SMS_123672419");
			// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
			request.setTemplateParam("{\"code\":\"" + "001" + "\"}");

			// 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
			// request.setSmsUpExtendCode("90997");

			// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
			// request.setOutId("yourOutId");

			// hint 此处可能会抛出异常，注意catch
			SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

			System.out.println(sendSmsResponse.getMessage());
			return sendSmsResponse;
		} catch (ClientException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static SendSmsResponse sendSms(String tel, String code) {
		try {
			// 可自助调整超时时间
		System.setProperty("sun.net.client.defaultConnectTimeout", "120000");
		System.setProperty("sun.net.client.defaultReadTimeout", "120000");

			// 初始化acsClient,暂不支持region化
		IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",
				accessKeyId, accessKeySecret);

			DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product,
					domain);

		IAcsClient acsClient = new DefaultAcsClient(profile);

			// 组装请求对象-具体描述见控制台-文档部分内容
		SendSmsRequest request = new SendSmsRequest();
			// 必填:待发送手机号
		request.setPhoneNumbers(tel);
			// 必填:短信签名-可在短信控制台中找到
			request.setSignName("微科软件");
			// 必填:短信模板-可在短信控制台中找到
		request.setTemplateCode("SMS_123672419");
			// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
		request.setTemplateParam("{\"code\":\"" + code + "\"}");

			// 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
		// request.setSmsUpExtendCode("90997");

			// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
		// request.setOutId("yourOutId");

			// hint 此处可能会抛出异常，注意catch
		SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

		return sendSmsResponse;
		} catch (ClientException e) {
			e.printStackTrace();
		}
		return null;
	}


	
	
	
	/**
	 * @Title		: sendSms
	 * @Param		: @param tel 手机号
	 * @Param		: @param code 验证码
	 * @Param		: @param bizId 拓展字段，返回时会返回该字段
	 * @Param		: @return
	 * @Return Type 	：SendSmsResponse
	 * @Description	: 发送短信验证码
	 */ 
	public static SendSmsResponse sendSms(String tel, String code, String bizId) {
		try {
			// 可自助调整超时时间
		System.setProperty("sun.net.client.defaultConnectTimeout", "120000");
		System.setProperty("sun.net.client.defaultReadTimeout", "120000");

			// 初始化acsClient,暂不支持region化
		IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",
				accessKeyId, accessKeySecret);

			DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product,
					domain);

		IAcsClient acsClient = new DefaultAcsClient(profile);

			// 组装请求对象-具体描述见控制台-文档部分内容
		SendSmsRequest request = new SendSmsRequest();
			// 必填:待发送手机号
		request.setPhoneNumbers(tel);
			// 必填:短信签名-可在短信控制台中找到
			request.setSignName("微科软件");
			// 必填:短信模板-可在短信控制台中找到
		request.setTemplateCode("SMS_123672419");
			// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
		request.setTemplateParam("{\"code\":\"" + code + "\"}");

			// 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
		// request.setSmsUpExtendCode("90997");

			// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
		// request.setOutId("yourOutId");

			// hint 此处可能会抛出异常，注意catch
		SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

		return sendSmsResponse;
		} catch (ClientException e) {
			e.printStackTrace();
		}
		return null;
	}

}

